//<![CDATA[
	var categorias={};
	var map;
	var geo;
	var markerBusca;
	var selRadar=false;
	var lati, latf, lngi, lngf;
	var marcadores=null;
	var icones = [];
	var totalCat=0;
	var isAdicionando=false;
	var cargaStatus=0;
	var reasons=[];
	
	//$(document).ready(function(){loadJson(); inicia();});
	
	function loadJson()	{
	
		$.get("/app/json",{acao: "categorias"}, function(data){
			var retorno = $.evalJSON(data);
			categorias = retorno["categorias"];
			totalCat = categorias.length;
			
			for(i=0; i<categorias.length; i++)
			{
				var item = categorias[i];
				var id = item.id;
				$("#categorias")[0].innerHTML+="<li><input type='checkbox' value='" + item.id + "' id='_cat" + item.id+"' onclick='carregaPontos();' checked>" + item.categoria + "</li>";
				$("#parCategoria").append("<option value="+item.id+">" + item.categoria + "</option>");
				
				icones[id] = new GIcon(G_DEFAULT_ICON,"/pontos/images/marker/" + item.icone);
			}
		});
		
		notificaCarga();
	}
	
	var altura;
	var largura;
	
	function ajustaPosicoes()
	{
		altura=document.documentElement.clientHeight-10;	
		largura=document.documentElement.clientWidth-10;
		
		$("#boxCadastro").css({top: (altura-300)/2, left: (largura-400)/2});
		//$("#boxProcura").css({left: (largura-400)/2});
		$("#map").css({width:largura, height: altura, top: 0, left: 5});
		$("#menu").css({left: largura-160, top: 25});
		$("#fsup").css({width: largura, top: 0});
		$("#frod").css({width: largura, top: altura-15});
		$("#carregando").css({top: (altura/2)-50, left: (largura/2)-110});
		
	}
	

	function inicia()
	{
	
		$(window).resize(function(){
			ajustaPosicoes();
		});
	
		ajustaPosicoes();
		
		// box de procura
		$("#boxProcura").dialog({modal: false,autoOpen: false,width: 400,height: 165,minWidth: 400,	minHeight: 165, overlay: true,position: ["center", 40],	close: fechaBox});
		$("#boxCadastro").dialog({modal: false,autoOpen: false,width: 400,height: 300,minWidth: 400, minHeight: 300, overlay: false,position: ["center", 40], close: fechaCad});
		
		$("#map").show();
		$("#fsup").show();
		$("#frod").show();
		
		// seta a funcao para o click do "proximo"
		$("#encontrei a").click(function(){
					executaPasso2();
		});
		
		// executa funcao na combo
		$("#parCategoria").change(function(){
			// radar
			if($(this).val()==2){
				$("#boxVelocidade").show();
				$("#boxAlerta").show();
				t = $("#boxCadastro").position().top-50;
				h = $("#boxCadastro").height()+100;
				$("#boxCadastro").height(h);
				$("#boxCadastro").css({top: t});
				selRadar=true;
			}
			else if(selRadar)
			{
				$("#boxVelocidade").hide();
				$("#boxAlerta").hide();
				t = $("#boxCadastro").position().top+50;
				h = $("#boxCadastro").height()-100;
				$("#boxCadastro").height(h);
				$("#boxCadastro").css({top: t});
				selRadar=false;
			}
		});
		
		$("#encontrei").hide();
		
		geo = new GClientGeocoder(); 
		map = new GMap2(document.getElementById("map"));
		map.addControl(new GLargeMapControl());
		
		// eventos para carregar dinamico os markers - ao iniciar, marca pontos iniciais
		GEvent.addListener(map,"dragstart",function(){	
			lati = map.getCenter().lat();
			lngi = map.getCenter().lng()
		});
		
		// evento para quando terminar de arrastar
		GEvent.addListener(map,"dragend",function(){
			
			if(!isAdicionando)
			{
				// pegar as latitudes e longitudes finais
				latf = map.getCenter().lat();
				lngf = map.getCenter().lng();
				
				var valorLatitude=(latf-lati);
				var valorLongitude=(lngf-lngi);
				
				valorLatitude = (valorLatitude <0 ? valorLatitude*-1 : valorLatitude);
				valorLongitude = (valorLongitude <0 ? valorLongitude*-1 : valorLongitude);
				
				if(valorLatitude>0.001||valorLongitude>0.001)
					// recarregar radares com base nas novas coordenadas
					carregaPontos();
			}
			
		});
		
		GEvent.addListener(map,"load",function(){
			notificaCarga();	
		});
		
		if(google.loader.ClientLocation)
			map.setCenter(new GLatLng(google.loader.ClientLocation.latitude,google.loader.ClientLocation.longitude),15);
		else 
			map.setCenter(new GLatLng(-23.548943,-46.638818),15);		
		
	}
	
	function notificaCarga()
	{
		cargaStatus++;
		
		if(cargaStatus==2)
		{
			$("#carregando").hide();
			cargaStatus=0;
		}
		
	}
      
      // ====== Geocoding ======
      function getAddress(adicionaMarca) {
	  
		if(adicionaMarca==undefined) adicionaMarca=true;
	  
		$("#carregando").show();
		
		if(markerBusca!=null)
			map.removeOverlay(markerBusca);
			
		map.clearOverlays();
	  
        geo.getLocations($("#endereco").val(), function (result)
          { 
            // If that was successful
            if (result.Status.code == G_GEO_SUCCESS) 
			{
				// Lets assume that the first marker is the one we want
				var p = result.Placemark[0].Point.coordinates;
				var lat=p[1];
				var lng=p[0];

				map.setCenter(new GLatLng(lat, lng), 16);
				
				if(adicionaMarca)
				{
					markerBusca = new GMarker(map.getCenter(), {draggable: true, bouncy: true, title: "Arraste para a posição do ponto"});			
					map.addOverlay(markerBusca);
					$("#encontrei").show();
				}
				
			  
            }
            // ====== Decode the error status ======
            else 
			{
				var reason="Code "+result.Status.code;
                if (reasons[result.Status.code]) 
				{
                  reason = reasons[result.Status.code]
                } 
				
				alert("Erro buscando: " + reason);
            }
			
			$("#carregando").hide();
          }
        );
      }
	  
	  function getAddressCentro()
	  {
			var ponto = map.getCenter();
			$("#endereco").attr("value", ponto.lat() + "," + ponto.lng());
			getAddress();
	  }
	
	function executaPasso2()
	{
		var gcoder = new GClientGeocoder();
		var opts={};
		x = markerBusca.getLatLng();
		
		isAdicionando=true;
		
		$("#carregando").show();
		
		// zera
		$("#parNome").attr("value","");
		$("#parDescricao").attr("value","");
		
		gcoder.getLocations(new GLatLng(x.lat(),x.lng()),function(ret){
		
			if(ret.Status.code==200)
			{
				var marca = ret.Placemark[0];
				
				opts={
						pais: marca.AddressDetails.Country.CountryNameCode,
						estado: marca.AddressDetails.Country.AdministrativeArea.AdministrativeAreaName,
						cidade: marca.AddressDetails.Country.AdministrativeArea.Locality.LocalityName,
						endereco: marca.AddressDetails.Country.AdministrativeArea.Locality.Thoroughfare.ThoroughfareName
					};
					
					
				$("#boxProcura").dialog('close');
				$("#boxCadastro").dialog('open');
				
				$("#parEndereco").attr("value",opts.endereco);
				$("#parCidade").attr("value",opts.cidade);
				$("#parUf").attr("value",opts.estado);
				
				$("#parNome")[0].focus();
				
			}
			else
			{
				alert("Erro na busca reversa");
			}
			
			$("#carregando").hide();
		
		});
	
		$("#boxProcura").dialog('close');
		$("#boxVelocidade").hide();
		$("#boxAlerta").hide();
		$("#boxCadastro").show();
		
		carregaPontos();
	}
	
	function gravaPonto()
	{
		var lat,lng,nome,tipo,velocidade,alerta,descricao,endereco,cidade,uf;
		var m = markerBusca.getLatLng();
		var postData={};
		
		postData = {
					lat:         m.lat(),
					lng:         m.lng(),
					nome:        $("#parNome").val(),
					tipo:        $("#parCategoria").val(),
					velocidade:  $("#parVelocidade").val(),
					alerta:      $("#parAlerta").val(),
					descricao:   $("#parDescricao").val(),
					endereco:    $("#parEndereco").val(),
					cidade:      $("#parCidade").val(),
					uf:          $("#parUf").val(),
					a:					 "salva_ponto"
				   };
		
		if(postData.nome==""){
			alert("Digite corretamente o nome");
			$("#parNome")[0].focus();
		}
		else if(postData.tipo==""){
			alert("Selecione o tipo de ponto");
			$("#parCategoria")[0].focus();
		}
		else if(postData.descricao==""){
			alert("Digite corretamente a descrição");
			$("#parDescricao")[0].focus();
		}
		else if(postData.cidade==""){
			alert("Digite corretamente a cidade");
			$("#parCidade")[0].focus();
		}
		else if(postData.uf.length!=2){
			alert("Digite corretamente a uf");
			$("#parUf")[0].focus();
		}
		else{
			
			$("#carregando").show();
			
			$.post("/app/dados", postData, function(data){
				
				var retorno = $.evalJSON(data);
				
				if(retorno.status=="ok")
				{
					alert("Ponto salvo com sucesso!\nAguarde a aprovação do desenvolvedor.");
					$("#boxCadastro").dialog('close');
					map.removeOverlay(markerBusca);
					isAdicionando=false;
					carregaPontos();
				}
				else
				{
					alert("Não foi possível salvar no momento");
				}
				
				$("#carregando").hide();
			
			});
		}
	}
	
	function carregaPontos()
	{
		
		var cats="";
		
		// categorias selecionadas
		for(i=1; i<=totalCat; i++){
			var ck = document.getElementById("_cat"+i);
			if(ck)
				if(ck.checked)
					cats = (cats=="" ? ck.value : cats+","+ck.value);
		}
		
		
		if(cats!="" && !isAdicionando)
		{
	
			$("#carregando").show();
			
			var retangulo = map.getBounds();
			var topo = retangulo.getNorthEast(); //nordeste
			var rodape = retangulo.getSouthWest(); //sudoeste
			
			var pontos = {
							acao: "pontos",
							lati: topo.lat(),
							lngi: topo.lng(),
							latf: rodape.lat(),
							lngf: rodape.lng(),
							interesse: cats,
							a: "json"
						};
			
			
			$.get("/app/json",pontos, function(data){
				
				map.clearOverlays();
				marcadores = new GMarkerManager(map, {borderPadding: 50, maxZoom:15 ,trackMarkers:true});
				
				var retorno = $.evalJSON(data);
				var arrmark = [];
				
				if(retorno["status"]=="ok")
				{
					var pontos = retorno["pontos"];	
					
					for(i=0; i< pontos.length; i++)
					{
						
						var a = pontos[i]["nome"];
						var b = pontos[i]["latitude"];
						var c = pontos[i]["longitude"];

						marcadores.addMarker(criarMarker(a,b,c,icones[pontos[i]["id_categoria"]]), 1);
					}
					
					marcadores.refresh();
				}
				else
				{
					alert("Erro buscando pontos");
				}
				
				$("#carregando").hide();
				
			});
			
			
		}
	}
	
	function criarMarker(a,b,c,z)
	{
		var _m = new GMarker(new GLatLng(parseFloat(b), parseFloat(c)), {icon: z});
		
		GEvent.addListener(_m,"click", function(){
			var msg="";
			msg+="<b>"+a+"</b>";
			msg+="<br>Latitude: <b>"+b+"</b>";
			msg+="<br>Longitude: <b>"+c+"</b>";
			
			_m.openInfoWindowHtml(msg)
		
		});
		
		return _m;
	
	}
	
	function novoPonto()
	{
			
		$("#envia").click(function(){getAddress()});
		$("#endereco").attr("value","");
		$("#boxCadastro").hide();
		$("#boxProcura").show();
		$("#encontrei").show();
		$("#boxProcura").dialog('open');
		$("#encontrei").hide();
		$("#endereco")[0].focus();

	}
	
	function navega()
	{
		$("#envia").click(function(){getAddress(false)});
		$("#endereco").attr("value","");
		$("#boxCadastro").hide();
		$("#boxProcura").dialog('open');
		$("#encontrei").hide();
		$("#endereco")[0].focus();
	}
	
	function fechaBox(){fecha('');}
	function fechaCad(){isAdicionando=false; fecha('boxCadastro');}
	
	function fecha(layer)
	{
		if(layer!='') $("#"+layer).hide();
		carregaPontos();
	}
	
	  //]]>